/* 
    axios配置写在这里
*/

import Vue from 'vue'
import axios from 'axios'
import {getToken,removeToken} from '@/utils/token'

import router from '@/router'

// 项目基地址
//console.log(process.env.VUE_APP_BASEURL);
axios.defaults.baseURL =process.env.VUE_APP_BASEURL

// 因为我们现在的后台需要携带过去cookies 所以需要设置下允许携带cookies 不是每个后台都需要
axios.defaults.withCredentials = true //允许携带cookies


// 以下是拦截器的代码

// 请求拦截器 todo
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //console.log('------------config',config);
  const token = getToken()
  // 因为接下来的页面都需要token 所以先在请求拦截器里边保存token
  if(token) {
    config.headers.token = token
    //console.log('------------config',config);
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});


// 响应拦截器  response
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    // 如果用户的token过期之后的处理方法    
    //console.log(response);
    if(response.data.code === 206) {//代表token已经过期了 应该跳回到登录页
      // 这里不能使用this.$router   因为这里不是组件
      // this.$router实例代表的是router 所以需要引入组件 利用router点出push方法
      // token过期应该删除
      removeToken()
      // this.$router.push('/login')
      // 如果我修改了token的值 跳回到登录页会经过导航守卫 守卫的跳转路径和这个一样 所以会报错 提示要避免跳转到相同的路径
      // 解决方法：  其中一个地址加个时间戳  这样每次的地址都不一样  报错解决
      router.push(`/login?t=${new Date() - 0}`)
    }
    return response.data;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

// 将axios挂载到vue的原型中 这样使用Vue的时候可以直接使用$axios请求
Vue.prototype.$axios = axios